import java.util.Random;
import java.util.Scanner;
import java.util.Arrays;

/**
 * ClassName: FuncExer
 * Package: PACKAGE_NAME
 * Description:
 *
 * @Author 杨宁
 * @Create 2024/6/13 13:29
 * @Version 1.0
 */
public class FuncExer {
    /*
     * 需求：
     * 用户购买机票时，机票原价会按照淡季、旺季，头等舱还是经济舱的情况进行相应的优惠，
     * 优惠方案如下：5-10月为旺季，头等舱9折，经济舱8.5折；11月到来年4月为淡季，头等舱7折，经济舱6.5折，
     * 请开发程序计算出用户当前机票的优惠价。
     * */
    /*public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入月份：");
        int month = scanner.nextInt();
        System.out.println();
        System.out.print("请输入价格：");
        double price = scanner.nextDouble();
        System.out.println();
        System.out.print("请输入舱型：");
        String type = scanner.next();
        double price1 = getPrice(month, price, type);
        System.out.println(type +",原价:"+ price + "元，优惠价格为："+price1);
    }
    public static double getPrice(int month, double price, String type) {
        // 旺季
        if(month >= 5 && month <= 10) {

            price = caculatePrice(price,type,0.9,0.85);
        }
        else {

            price = caculatePrice(price,type,0.7,0.65);
        }
        return price;
    }
    public static double caculatePrice(double price, String type, double discount1, double discount2) {
        switch (type) {
            case "头等舱":
                price *= discount1;
                break;
            case "经济舱":
                price *= discount2;
                break;
        }
        return price;
    }*/
    /*
     * 需求：
     * 找出1-100之间的质数
     * */
    /*public static void main(String[] args) {
        printPrime();
    }
    public static void printPrime() {
        for (int i = 1; i <= 100; i++) {
            if(isPrime(i)) {
                System.out.print(i + " ");
            }
        }
    }
    public static boolean isPrime(int n) {
        boolean bool = true;
        for (int i = 2; i <= Math.sqrt(n); i++) {
            if(n % i == 0) {
                bool = false;
                break;
            }
        }
        return bool;
    }*/

    /*
    * 需求：
    * 开发一个程序，可以生成指定位数的验证码，每位可以是数字、大小写字母。z
    * 最后一位为数字
    * */
    /*public static void main(String[] args) {
        System.out.print("生成的6位验证码为：");
        System.out.print(createCode(6));;
    }
//    public static String createCode(int n) {
    public static char[] createCode(int n) {
        // 至少四位
        if(n < 4) {

        }
        // 大小写字母 A-Z a-z
        char[] arr1 = new char[52];
        for (int i = 0; i < 26; i++) {
            arr1[i] = (char)('A' + i);
            arr1[i + 26] = (char)('a' + i);
        }
//        System.out.println(arr1);
        // 数字0-9
//        int[] arr2 = new int[10];
//        for (int i = 0; i < 10; i++) {
//            arr2[i] = i;
//        }
        char[] arr2 = new char[10];
        for (int i = 0; i < 10; i++) {
            arr2[i] = (char)('0' + i);
        }
        Random random = new Random();
        char[] code = new char[n];
//        String code = "";
        for (int i = 0; i < n - 1; i++) {
            int index = random.nextInt(52);
//            code += arr1[index];
            code[i] = arr1[index];
        }
//        System.out.println(arr2);
        int index2 = random.nextInt(10);
//        code += arr2[index2];
        code[n-1] = arr2[index2];
        return code;
    }*/

    /*
     * 需求：
     * 加密数字解密：先得到每位数字，然后每位数字都加上5，再对10求余，最后将所有数字反转，得到一串新数，按照这个加密规则进行解密。
     */
    /*public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个正整数：");
        int n = scanner.nextInt();
        int num = enCode(n);
        System.out.println("加密后数字为："+num);
        System.out.println("解密后数字为："+deCode(num));
    }

    *//**
     * 数字加密 每位数字都加上5，再对10求余，最后将所有数字反转，得到一串新数
     *//*

    public static int enCode(int num) {

        int temp = num;
        // 计算数字位数
        int count = 0;
        while(num!=0) {
            num /= 10;
            count++;
        }

        //存储数字
        int[] arr = new int[count];
        int[] reverseArr = new int[count];
        for (int i = count -1; i >=0; i--) {
            // 得到每位数字
            arr[i] = temp % 10;
            temp /= 10;
            // 每位数字都加上5，再对10求余
            arr[i] = (arr[i] + 5) % 10;
            // 数字反转
            //放入反转的新数组
            reverseArr[count - 1 - i] = arr[i];

        }



//        for (int i = 0; i < count; i++) {
//            System.out.print(arr[i] + " ");
//        }
        // 返回数字
        int result = 0;
        for (int i = 0; i < reverseArr.length; i++) {
            result = result * 10 + reverseArr[i];
        }
        return result;
    }

    *//**
     * 数字解密 将所有数字反转，再每位乘10，每位数字都减5，得到一串新数
     * @param num
     * @return
     *//*
    public static int deCode(int num) {

        int temp = num;
        // 计算数字位数
        int count = 0;
        while(num!=0) {
            num /= 10;
            count++;
        }

        //存储数字并反转
        int[] arr = new int[count];
        for (int i = 0; i < arr.length; i++) {
            // 得到每位数字 并倒着存放
            int n = temp % 10;
            temp /= 10;
            // 每位数字都加上5，再对10求余 对此操作逆向操作
//            arr[i] = (arr[i] + 5) % 10;
            if(n>=5 && n <=9) {
                arr[i] = n -5;
            }
            else {
                arr[i] = (10 + n) - 5;
            }

        }



//        for (int i = 0; i < count; i++) {
//            System.out.print(arr[i] + " ");
//        }
        // 返回数字
        int result = 0;
        for (int i = 0; i < arr.length; i++) {
            result = result * 10 + arr[i];
        }
        return result;
    }*/

    /**
     * 抽奖，分别有{2,588,888,1000,10000}五个奖金。
     * 请使用代码模拟抽奖，打印出每个奖项。奖项的出现顺序要随机且不重复。
     * 打印效果如下：可随机顺序。
     * 888元的奖金被抽出。
     * 588元的奖金被抽出。
     * 10000元的奖金被抽出。
     * 1000元的奖金被抽出。
     * 2元的奖金被抽出。
     * @param args
     */
    /*public static void main(String[] args) {
        randomPrize();
    }

    public static void randomPrize() {
        int[] prize = {2,588,888,1000,10000};
        Random random = new Random();
        for (int i = 0; i < prize.length; i++) {
            int index = random.nextInt(prize.length);
            int temp = prize[index];
            prize[index] = prize[i];
            prize[i] = temp;

        }
        for (int i = 0; i < prize.length; i++) {
            System.out.println(prize[i]+"元的奖金被抽出。");

        }

    }*/

    /**
     * 大乐透抽奖 前区5个号码 从1-35中生成 后区2个号码 从1-12中生成
     * @param args
     */
    public static void main(String[] args) {
        for (int i = 0; i < 1000; i++) {

            lottery();
            System.out.println("");
        }
    }

    public static void lottery() {
        int[] arr = new int[35];
//        int[] pre = new int[35];
//        int[] suf = new int[12];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = i + 1;
        }
        int[] pre = new int[5];
        int[] suf = new int[2];
        Random random = new Random();
        //前区号码 5个 1-35中获取
        for (int i = 0; i < 5;) {
            int r = random.nextInt(35);
            if(!isExist(arr[r],pre)) {
                pre[i] = arr[r];
                i++;
            }
        }
        //后区号码 2个 1-12中获取
        for (int i = 0; i < 2;) {
            int r = random.nextInt(12);
            if(!isExist(arr[r],suf)) {
                suf[i] = arr[r];
                i++;
            }
        }

        Arrays.sort(pre);
        Arrays.sort(suf);
        int[] result = new int[7];

        for (int i = 0; i < pre.length; i++) {
            result[i] = pre[i];
        }
        for (int i = 0; i < suf.length; i++) {
            result[i + 5] = suf[i];
        }
        for (int i = 0; i < result.length; i++) {
            System.out.print(result[i] + " ");
        }

    }

    public static boolean isExist(int n, int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            if(n == arr[i]) {
                return true;
            }
        }
        return false;
    }
}
